/**
 * 安卓白金英雄坛制作组 <br>
 * 文件名：CScreen.java <br>
 * 创建时间：2013-5-19 下午7:29:22 <br>
 * 所属项目：GmudEX <br>
 * @author 12548 <br>
 */
package lostland.gmud.exv2.blgframework;

import java.util.ArrayList;

/**
 * 类名：CScreen <br>
 * 说明：
 *
 * @author 12548
 */
public abstract class CScreen extends BasicScreen {

	private boolean __init = false;

	public abstract void present(float deltaTime);

	public abstract void pause();

	public abstract void resume();

	public abstract void dispose();

	/* （非 Javadoc）
	 * @see lostland.gmud.exv2.blgframework.BasicScreen#isStable()
	 */
	@Override
	public boolean isStable() {
		return false;
	}

	public void npause() {
		pause();
	}

	public void nresume() {
		resume();
	}

	@SuppressWarnings("deprecation")
	public void pushToGame() {
		if (!__init) {
			__init();
		}
		getGame().pushScreen(this);
	}

	private void __init() {
		__init = true;
		onInit();
	}


	/**
	 * 覆盖此函数以执行初始化操作。
	 */
	public void onInit() {
	}

	;

	@SuppressWarnings("deprecation")
	public void replaceCurrent() {
		if (!__init) {
			__init();
		}
		getGame().replaceCurrentScreen(this);
	}


	/**
	 * 如果当前场景在游戏中，则用指定的场景替换当前场景。比replaceCurrent更精准。
	 *
	 * @param screen 要用来替换当前场景的场景。
	 */
	public void replaceBy(CScreen screen) {
		ArrayList<CScreen> scenes = getGame().scene;
		for (int i = scenes.size() - 1; i >= 0; i--) {
			if (scenes.get(i) == this) {
				pause();
				dispose();
				if (!screen.__init) {
					screen.__init();
				}
				screen.resume();
				scenes.set(i, screen);
				return;
			}
		}
	}

	public void insertToGame() {
		if (!__init) {
			__init();
		}
		getGame().scene.add(getGame().scene.size() - 1, this);
	}

	public boolean removeFromGame() {

		if (this == getGame().getCurrentScreen()) {
			getGame().popScreen();
			return true;
		}

		return getGame().scene.remove(this);
	}

	public CScreen getParentScreen() {
		ArrayList<CScreen> scenes = getGame().scene;
		for (int i = scenes.size() - 1; i >= 0; i--) {
			if (scenes.get(i) == this) {
				if (i > 0) return scenes.get(i - 1);
			}
		}
		return scenes.get(0);
	}
}
